package jnpf.base.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import jnpf.base.ActionResult;
import jnpf.base.Page;
import jnpf.base.model.online.BatchOnlineModel;
import jnpf.base.service.UserOnlineService;
import jnpf.constant.MsgCode;
import jnpf.message.model.UserOnlineModel;
import jnpf.message.model.UserOnlineVO;
import jnpf.util.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 在线用户
 *
 * @author JNPF开发平台组
 * @version V3.1.0
 * @copyright 引迈信息技术有限公司
 * @date 2019年9月26日 上午9:18
 */
@Api(tags = "在线用户", value = "Online")
@RestController
@RequestMapping("/api/system/OnlineUser")
public class UserOnlineController {

    @Autowired
    private UserOnlineService userOnlineService;

    /**
     * 列表
     *
     * @param page 分页参数
     * @return ignore
     */
    @ApiOperation("获取在线用户列表")
    @GetMapping
    public ActionResult list(Page page) {
        List<UserOnlineModel> data = userOnlineService.getList(page);
        List<UserOnlineVO> voList= data.stream().map(online->{
            UserOnlineVO vo = JsonUtil.getJsonToBean(online, UserOnlineVO.class);
            vo.setUserId(online.getToken());
            //vo.setUserName(vo.getUserName() + "/" + online.getDevice());
            return vo;
        }).collect(Collectors.toList());
        return ActionResult.success(voList);
    }

    /**
     * 注销
     *
     * @param token 主键值
     * @return
     */
    @ApiOperation("强制下线")
    @DeleteMapping("/{token}")
    public ActionResult delete(@PathVariable("token") String token) {
        userOnlineService.delete(token);
        return ActionResult.success("操作成功");
    }

    /**
     * 批量下线用户
     *
     * @param model 主键值
     * @return ignore
     */
    @ApiOperation("批量下线用户")
    @DeleteMapping
    public ActionResult clear(@RequestBody BatchOnlineModel model) {
        userOnlineService.delete(model.getIds());
        return ActionResult.success("操作成功");
    }
}
